#pragma once
#include "Circle.h"
#include "Node.h"

class List
{	
	Node Head;	// ��������� �������, ������� �������� ��������� ������ ������
	Node Tail;	// ��������� �������, ������� �������� ��������� ����� ������
	size_t m_size;	//���������� ���������

public:
	enum class TO { to_head, to_tail };

	List();
	List(const List&);
	List(List&&);
	~List();

	void Ad_to(TO, const Circle&);//1)	�����, ������� ��������� ������� � ������ ���  � ����� ������
	bool RemoveOne(const Circle&);//3)	�������� �� ������ ������� ��������, 
	//������ �������� ��������� �� ��������� ���������.
	//���� ������� ������ � ������, ����� ���������� true,
	//���� �������� � ����� ��������� � ������ �� ���� � false
	int Remove_all_match(const Circle&);//4)	�������� �� ������ ���� ���������, ������ ������� ��������� �� ��������� ���������.
	// ����� ���������� ���������� ��������� ���������.
	void Remove_list();//5)	������� ������ ������
	
	void Swap(Node* prev, Node* movable);
	void Sort_list(); //���������a �� ����������� ������� �������.
	
	
	List& operator=(const List&);
	List& operator=(List&&);

	/*void InputFromFile();*/

	friend std::ostream& operator<<(std::ostream& os, const Node& node);
	friend std::ostream& operator<<(std::ostream& os, const List& list);
	friend List& operator>>(std::ifstream& is, List& list);
};

std::ostream& operator<<(std::ostream& os, const List& list);
List& operator>>(std::ifstream& is, List& list);